////////////////////////////////////////////////////////////////////
#include"Date.h"

void TestDate1()
{
	Date d1(2024, 4, 14);
	Date d2 = d1 + 30000;
	d1.Print();
	d2.Print();

	Date d3(2024, 4, 14);
	Date d4 = d3 - 5000;
	d3.Print();
	d4.Print();

	Date d5(2024, 4, 14);
	d5 += -5000;
	d5.Print();
}

void TestDate2()
{
	Date d1(2024, 4, 14);
	Date d2 = ++d1;
	d1.Print();
	d2.Print();

	Date d3 = d1++;
	d1.Print();
	d3.Print();

	d1.operator++(1);
	d1.operator++(100);
	d1.operator++(0);
	d1.Print();
}

void TestDate3()
{
	Date d1(2024, 4, 14);
	Date d2(2034, 4, 14);

	int n = d1 - d2;
	cout << n << endl;

	n = d2 - d1;
}

void TestDate4()
{
	Date d1(2024, 4, 14);
	Date d2 = d1 + 30000;

	// operator<<(cout, d1)
	cout << d1;
	cout << d2;

	cin >> d1 >> d2;
	cout << d1 << d2;
}

void TestDate5()
{
	const Date d1(2024, 4, 14);
	d1.Print();

	//d1 += 100;
	d1 + 100;

	Date d2(2024, 4, 25);
	d2.Print();

	d2 += 100;

	d1 < d2;
	d2 < d1;
	cout << d1 << endl;
}

int main()
{
	// 提高效率输入的效率，竞赛
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	//TestDate4();
	TestDate5();

	return 0;
}



class A
{
public:
	// 我们不实现，编译器会自己实现，我们实现了编译器就不会自己实现了
	// 一般不需要我们自己实现
	// 除非不想让别人取到这个类型对象的真实地址
	A* operator&()
	{
		cout << "A* operator&()" << endl;

		return nullptr;
	}

	const A* operator&() const
	{
		cout << "const A* operator&() const" << endl;

		return (const A*)0xffffffff;
	}
private:
	int _a1 = 1;
	int _a2 = 2;
	int _a3 = 3;
};

int main()
{
	A aa1;
	const A aa2;
	cout << &aa1 << endl;
	cout << &aa2 << endl;

	return 0;
}